001 package videoautomat; 002 import sale.Gate; 003 import sale.SaleProcess; 004 import sale.SalesPoint; 005 import sale.UIGate; 006 import sale.stdforms.FormSheetStrategy; 007 import videoautomat.contentcreator.RentConfirmFSContentCreator; 008 import videoautomat.contentcreator.RentPayFSContentCreator; 009 import videoautomat.contentcreator.RentTTFSContentCreator; 010 import data.DataBasketConditionImpl; 011 import data.MoneyBag; 012 import data.NumberValue; 013 import data.ooimpl.MoneyBagImpl; 014 import data.stdforms.SingleTableFormSheet; 015 import data.stdforms.TwoTableFormSheet; 016 import data.stdforms.twotableformsheet.CCSStrategy; 017 import data.stdforms.twotableformsheet.CSDBStrategy; 018 import data.swing.DefaultStoringStockDBETableEntryDescriptor; 019 /** 020 * This class implements a <code>SaleProcess</code> used to rent videos. 021 * 022 */ 023 public class SaleProcessRent extends SaleProcess { 024 /* 025 * Key of a Databasket-subbasket which contains the temporary removed videos of the VideoShops stock 026 */ 027 public static final String SUB_SHOP_VIDEO = "videos_cs"; 028 /* 029 * Key of Databasket-subbasket which contains the temporary added videos of the users-stock 030 */ 031 public static final String SUB_USER_VIDEO = "video_ss"; 032 /* 033 * Key of Databasket-subbasket which contains the temporary added money of the user 034 */ 035 public static final String SUB_TMP_MONEY = "money_temp"; 036 /* 037 * Key of Databasket-subbasket which contains the temporary removed money of the VideoShops MoneyBag 038 */ 039 public static final String SUB_SHOP_MONEY = "money_shop"; 040 041 042 043 /** Key to the temp money bag for the porcess data of the process context */ 044 public static final String MB_TEMP_KEY = "mb_temp"; 045 046 047 public static final String SUM_KEY = "nv_sum"; 048 049 /** 050 * Constructs a new SaleProcessRent 051 * 052 */ 053 public SaleProcessRent() { 054 super("SaleProcessRent"); 055 } 056 /** 057 * Implementation of the inherited abstract method. 058 * 059 * @return a <code>Gate</code> where the user makes a selection 060 * 061 * @see sale.SaleProcess#getInitialGate() 062 */ 063 protected Gate getInitialGate() { 064 getContext().setProcessData(MB_TEMP_KEY, new MoneyBagImpl("mb_user", VideoShop.getCurrency())); 065 066 getBasket().setCurrentSubBasket(SUB_SHOP_VIDEO); 067 CSDBStrategy csdbs = new CSDBStrategy(); 068 csdbs.setErrorHandler(FormSheetStrategy.MSG_POPUP_ERROR_HANDLER); 069 070 // UIGate erzeugen 071 UIGate uig_offer = new UIGate(null, null); 072 073 TwoTableFormSheet ttfs_rent = 074 TwoTableFormSheet.create( 075 "Choose your videos!", 076 VideoShop.getVideoStock(), 077 getBasket(), 078 uig_offer /*Verknüpfung Gate und Formsheet */, 079 null, 080 null, 081 false, 082 new TEDVideoStock(), 083 null, 084 csdbs); 085 086 087 088 //aussehen des Formsheet mit dem ContenCreator anpassen; in diesem Fall zwei neue Button setzen 089 ttfs_rent.addContentCreator(new RentTTFSContentCreator()); 090 091 return uig_offer; 092 } 093 094 public Gate restart(){ 095 return getInitialGate(); 096 } 097 098 099 /** 100 * @return a <code>Gate</code> where the money gets inserted 101 */ 102 103 104 public Gate getPayGate() { 105 106 107 108 NumberValue nv_sum = (NumberValue) getContext().getProcessData(SUM_KEY); 109 CCSStrategy ccss = new CCSStrategy(); 110 ccss.setErrorHandler(FormSheetStrategy.MSG_POPUP_ERROR_HANDLER); 111 112 UIGate uig_pay = new UIGate(null, null); 113 114 //FormSheet erzeugen 115 TwoTableFormSheet ttfs_pay = 116 TwoTableFormSheet.create( 117 "Throw the money in the slot, please.", 118 VideoShop.getCurrency(), 119 (MoneyBag)getContext().getProcessData(MB_TEMP_KEY), 120 getBasket(), 121 uig_pay, 122 new ComparatorCurrency(), 123 new ComparatorCurrency(), 124 false, 125 null, 126 null, 127 ccss); 128 // ContentCreator erstellen 129 RentPayFSContentCreator formSheetCC = new RentPayFSContentCreator(this); 130 131 //so kann man dem Formsheet bestehende Daten mitgeben! z.b. um Eingabefelder schon zu befüllen 132 formSheetCC.setPayValue(VideoShop.getCurrency().toString(nv_sum)); 133 134 ttfs_pay.addContentCreator(formSheetCC); 135 136 return uig_pay; 137 } 138 139 140 /** 141 * @return a <code>Gate</code> where the selected videos and the change money is shown 142 */ 143 public Gate getConfirmGate() { 144 145 UIGate uig_confirm = new UIGate(null, null); 146 getBasket().setCurrentSubBasket(SUB_SHOP_VIDEO); 147 SingleTableFormSheet fs = 148 SingleTableFormSheet.create( 149 "Confirm your transaction!", 150 getBasket(), 151 uig_confirm, 152 DataBasketConditionImpl.allStockItemsWithDest( 153 ((AutomatUser) ((SalesPoint) getContext()).getUser()).getVideoStock()), 154 new DefaultStoringStockDBETableEntryDescriptor()); 155 156 fs.addContentCreator(new RentConfirmFSContentCreator(this, uig_confirm)); 157 uig_confirm.setFormSheet(fs); 158 return uig_confirm; 159 } 160 161 162 } 163